Il existe de multiples options informatiques pour faire de la stylométrie. Nous nous proposons, dans ce cours, d’utiliser le package R nommé Stylo, mais d’autres options existent comme FactoMineR. Ce package étant développé par des français de l’agrocampus de Rennes, notons qu’une importante documentation en français est disponible, et permettra aux personnes intéressées de continuer leur apprentissage de la stylométrie.

Ce cours est disponible en ligne avec le corpus que nous utilisons dans ce notebook: on peut le trouver sur notre Github. Il est distribué avec une licence CC-BY.

Le corpus est constitué de pièces de théâtre du XVIIe siècle, disponibles sur le site www.theatre-classique.fr, rassemblées par J.-B. Camps (Ecole des Chartes) et adaptées par nous-mêmes pour correspondre aux besoins de ce cours.

1. Quelques remarques avant de commencer

1.1 Des ressources en ligne

Stylo est développé par Maciej Eder (Cracovie), Mike Kestmont (Anvers) et Jan Rybicki (Cracovie). On trouvera de nombreuses ressources sur le site de leur groupe de computational stylistics et sur leur GitHub, qui contient un repo consacré au package stylo avec de nombreuses informations sur son fonctionnement.

Pour ceux qui voudraient s’entraîner avec d’autres données que celles fournies pour le cours, un repo avec 100 romans anglais se trouve sur leur GitHub (cliquez sur le bouton vert Clone or download à droite pour télécharger le tout au format zip).

1.2 À propos du corpus

Stylo a besoin de savoir où chercher les données (pour nous il s’agit de notre corpus) qu’il va utiliser, et celles-ci doivent impérativement obéir à trois règles simples:

  1. Tous les textes qui forment notre corpus de travail doivent se trouver dans un dossier intitulé corpus.
  2. Ce dossier corpus ne doit contenir que les fichiers du corpus: tout autre document se retrouverait analysé avec le reste, et perturberait les résultats.
  3. Les fichiers du corpus doivent utiliser un même format, soit en txt, soit en XML, soit en HTML.

1.3 Préparer la session de travail

Nous devons préparer la session de travail, en désignant à R le fichier de notre ordinateur à partir duquel nous allons travailler pour qu’il trouve notre fichier corpus, et qu’il y sauvegarde nos résultats.

Pour indiquer où se trouve le fichier de travail, deux solutions sont possibles:

  • ou bien via le menu avec Session>Set Working Directory>Choose Directory
  • ou bien directement dans R avec la commande setwd (pour Set working directory), qui s’utilise de cette manière.

On peut vérifier que le chemin vers le dossier de travail a bien été pris en compte avec une autre commande: getwd (pour Get working directory):

## [1] "/Users/gabaysimon/GitHub/UNIGE/32M7129/Cours_05"

Tout est en ordre? Avançons! installons stylo()

## Loading required package: stylo
## 
## ### stylo version: 0.6.9 ###
## 
## If you plan to cite this software (please do!), use the following reference:
##     Eder, M., Rybicki, J. and Kestemont, M. (2016). Stylometry with R:
##     a package for computational text analysis. R Journal 8(1): 107-121.
##     <https://journal.r-project.org/archive/2016/RJ-2016-007/index.html>
## 
## To get full BibTeX entry, type: citation("stylo")

Il ne nous reste plus qu’à lancer stylo, avec la commande… stylo()!

2 Le data clustering

2.1 Ouvrir stylo

L’application Stylo peut être utilisée en ligne de commande, mais aussi avec une GUI (graphical user interface, en français “interface graphique”). Si vous voulez avoir un premier aperçu, retirez le # au début de la ligne infra et cliquez sur Run.

2.2 Une première analyse de cluster

Nous allons désormais tenter une première analyse de cluster. Le data clustering (ou “partitionnement de données” en français) cherche à diviser un ensemble de données en différents “groupes” homogènes selon des caractéristiques qu’ils partagent. Ces groupes (dans notre cas des pièces de théâtre) sont formés à partir de calculs qui déterminent leur proximité (similarité ou distance).

Note importante Afin de gagner du temps, nous avons directement paramétré le formulaire de la GUI, mais la commande stylo() vide, comme précédemment (cf. 2.1), suffirait si les bonnes cases étaient bien cochées.

Lorsque vous appuyerez sur Run observez la console: une série de messages vous avertit de ce qu’il se passe.

## using current directory...
## Performing no sampling (using entire text as sample)
## loading CORNEILLEP_ANDROMEDE.xml ...
## loading CORNEILLEP_CID.xml   ...
## loading CORNEILLEP_ILLUSIONCOMIQUE.xml   ...
## loading CORNEILLEP_MEDEE.xml ...
## loading DURYER_CLARIGENE.xml ...
## loading DURYER_CLITOPHON.xml ...
## loading DURYER_DYNAMIS.xml   ...
## loading DURYER_ESTHER.xml    ...
## loading MOLIERE_AMPHITRYON.xml   ...
## loading MOLIERE_DOMGARCIEDENAVARRE.xml   ...
## loading MOLIERE_MISANTHROPE.xml  ...
## loading MOLIERE_TARTUFFE.xml ...
## loading RACINE_BERENICE.xml  ...
## loading RACINE_ESTHER.xml    ...
## loading RACINE_IPHIGENIE.xml ...
## loading RACINE_PHEDRE.xml    ...
## loading ROTROU_COSROES.xml   ...
## loading ROTROU_DEUXPUCELLES.xml  ...
## loading ROTROU_DOMBERNARDDECABRERE.xml   ...
## loading ROTROU_HERCULEMOURANT.xml    ...
## loading SCARRON_DOMJAPHETDARMENIE.xml    ...
## loading SCARRON_ECOLIERDESALAMANQUE.xml  ...
## loading SCARRON_FAUSSEAPPARENCE.xml  ...
## loading SCARRON_GARDIENDESOIMEME.xml ...
## loading SCUDERY_MORTDECESAR.xml  ...
## loading SCUDERY_ORANTE.xml   ...
## loading SCUDERY_PRINCEDEGUISE.xml    ...
## loading SCUDERY_VASSALGENEREUX.xml   ...
## slicing input text into tokens...
## 
## turning words into features, e.g. char n-grams (if applicable)...
## 
## Total nr. of samples in the corpus: 28
## .........................
## ...
## The corpus consists of 480663 tokens
## 
## processing  28  text samples
## ..       
## combining frequencies into a table...
## 
## 
## culling @ 0  available features (words) 5000
## Calculating z-scores... 
## 
## Calculating Manhattan distances...
## MFW used: 
## 100 
## Processing metadata...
## 
## 
## Assigning plot colors according to file names...
## 
##  
## 
## Function call:
## stylo(gui = TRUE, corpus.dir = "corpus", corpus.format = "xml.drama",     corpus.lang = "French", analyzed.features = "w", mfw.min = 100,     mfw.max = 100, mfw.incr = 100, analysis.type = "CA", distance.measure = "manhattan",     pca.visual.flavour = "classic")
## 
## Depending on your chosen options, some results should have been written
## into a few files; you should be able to find them in your current
## (working) directory. Usually, these include a list of words/features
## used to build a table of frequencies, the table itself, a file containing
## recent configuration, etc.
## 
## Advanced users: you can pipe the results to a variable, e.g.:
##   publishable.results = stylo()
## this will create a class "publishable.results" containing some presumably
## interesting stuff. The class created, you can type, e.g.:
##   summary(publishable.results)
## to see which variables are stored there and how to use them.
## 
## 
## for suggestions how to cite this software, type: citation("stylo")

Reprenons le processus dans ses grandes lignes:

  1. loading…: Une fois la commande lancée, chaque texte est est chargé.
  2. Total nr. of samples…: On nous avertit du nombre de textes dans le corpus, qui sont tous éclatés en tokens (ici des mots).
  3. combining frequencies…: Le nombre d’occurrence de chaque token est calculé pour chaque document du corpus, pour former un tableau de fréquences.
  4. Calculating Manhattan distance: ces tableaux de fréquences permettent de voir si certains tokens reviennent de manière équivalente dans d’autres documents, et de produire les clusters. Nous allons revenir plusieurs fois sur ce point par la suite.

Regardons maintenant le graphique qui nous est donné. Il s’agit d’un dendogramme, qui est accompagné de quelques informations en bas de page (100 MFW Culled @ 0% Manhattan distance):

  • On remarque l’utilisation de différentes couleurs: tous les labels (les noms des fichiers formant le corpus) avec la même chaîne de caractères avant l’underscore (ici chaque auteur) ont la même, afin de simplifier la lecture des résultats.
  • 100 MFW Nous avons utilisé les 100 mots les plus fréquents. Pendant le traitement des données, Stylo a généré quelques fichiers qui nous permettent de voir quels sont ces mots, ainsi que leur fréquence. Allez dans votre dossier de travail, et regardez les documents wordlist.txt et table_with_frequencies.txt. Nous reviendrons plus tard sur ces données.
  • Culled @ 0%: Le culling est à 0%, ce qui signifie que les mots les plus fréquents peuvent être absents de certains textes. Un culling à 100% signifierait que nous ne retiendrions que les mots les plus fréquents retenus dans tous les textes.
  • Manhattan distance: Nous avons utilisé la distance dite “de Manhattan”, mais il en existe d’autres:
    • certaines sont partagées par tous les mathématiciens (euclidienne, Canberra, etc.).
    • certaines sont plus spécifiques à la stylométrie (delta classic ou “distance de Burrows”, cosine delta ou “distance de Würzburg”, etc.).

2.3 Contrôler la fiabilité des résultats: répéter l’opérations avec d’autres paramètres

Nous avons obtenu un cluster: il est plausible, mais est-il fiable? Nous avons besoin d’encore plus de certitudes… Une première solution est de répéter le même clacul, en augmentant le nombre des mots les plus fréquents: passons de 100 à 1000.

Les résultat est déjà moins net… À quel moment du bruit a-t-il commencé à perturber la formation des groupes? Afin de le savoir, nous pouvons demander à Stylo de répéter l’analyse de cluster un certain nombre de fois entre 100 et 1000.

Demandons à Stylo de refaire le calculs dix fois, en incrémentant de 100 à chaque fois.

Difficile cependant de comparer facilement 10 dendogrammes… Et comment faire pour 20, 30 ou 1000 dendogrammes?

2.4 Contrôler autrement la fiabilité des résultats: le consensus tree

Il est possible de représenter graphiquement la somme de ces informations: il s’agit du concensus tree (“arbre de consensus”, en français). Voyons la forme de ce graphique avec les résultats que nous venons d’obtenir.

C’est l’occasion de changer dans la méthode de calcul de distance, pour vérifier les performances de chacune. Nous utilisions jusqu’à présent la “distance de Manhattan”, essayons cette fois avec une distance euclidienne.

Et maintenant avec une distance typique de la stylométrie: la distance de Burrows (du nom de son inventeur, John Burrows), aussi appelée “classic delta”.

Comparez les résultats obtenus avec ces différentes méthode de calcul. Réflechissez à ce dilemme: la différence entre les résultats signifie-t-elle

  • que les résultats ne sont pas fiables?
  • que certains calculs de distance ne sont pas fiables?
  • ou bien que l’on ne peut rien déduire de ce corpus?

2.5 S’appuyer sur d’autres expériences

En plus de cette approche empirique, il est important de s’appuyer sur des études qui précisent les paramètres les plus efficaces. Selon Evert, Proisl, Jannidi, Reger, Pielström, Schöch, Vitt (2017), 5000 mots MFW avec cosine delta serait le plus efficace (y compris pour le français):

100% center

100% center

Evert, Proisl, Jannidi, Reger, Pielström, Schöch, Vitt, " Understanding and explaining Delta measures for authorship attribution",Digital Scholarship in the Humanities, Volume 32, December 2017, Pages ii4–ii16, https://doi.org/10.1093/llc/fqx023

3 Fonctionnement de stylo

Les données utilisées pendant l’analyse stylométrique sont accessibles: pour les voir, nous devons donc créer une variable et les stocker. Appelons la variable “resultats”, qui s’utilise ainsi:

Voyons ce que nous donne cette variable:

## 
## Function call:
## stylo(gui = FALSE, corpus.dir = "corpus", corpus.format = "xml.drama",     corpus.lang = "French", analyzed.features = "w", mfw.min = 5000,     mfw.max = 100, mfw.incr = 100, analysis.type = "CA", distance.measure = "wurzburg",     pca.visual.flavour = "classic")
## 
## Depending on your chosen options, some results should have been written
## into a few files; you should be able to find them in your current
## (working) directory. Usually, these include a list of words/features
## used to build a table of frequencies, the table itself, a file containing
## recent configuration, etc.
## 
## Advanced users: you can pipe the results to a variable, e.g.:
##   publishable.results = stylo()
## this will create a class "publishable.results" containing some presumably
## interesting stuff. The class created, you can type, e.g.:
##   summary(publishable.results)
## to see which variables are stored there and how to use them.
## 
## for suggestions how to cite this software, type: citation("stylo")
## 

Les données sont nombreuses: on nous redirige vers une sorte de portail avec les différentes données collectées, que l’on peut consulter avec le code suivant:

## 
## Function call:
## stylo(gui = FALSE, corpus.dir = "corpus", corpus.format = "xml.drama",      corpus.lang = "French", analyzed.features = "w", mfw.min = 5000,      mfw.max = 100, mfw.incr = 100, analysis.type = "CA", distance.measure = "wurzburg",      pca.visual.flavour = "classic") 
## 
## Available variables:
## 
##            distance.table  final distances between each pair of samples
##                  features  features (e.g. words, n-grams, ...) applied to data
##    features.actually.used  features (e.g. frequent words) actually analyzed
##     frequencies.0.culling  frequencies of words/features accross the corpus
##             list.of.edges  edges of a network of stylometric similarities
##      table.with.all.freqs  frequencies of words/features accross the corpus
##    table.with.all.zscores  z-scored frequencies accross the corpus
## 
## These variables can be accessed by typing e.g.:
## 
##  resultats$distance.table

Plusieurs variables sont diponibles. features permet d’afficher la liste des mots par ordre de fréquence:

## 
## ---------------------------------------------------
## features (e.g. words, n-grams, ...) applied to data 
## ---------------------------------------------------
## 
##   [1]  de            et            que           le            
##   [5]  vous          je            l             la            
##   [9]  à            un            il            en            
##  [13]  est           d             qu            ce            
##  [17]  ne            qui           les           pour          
##  [21]  mon           me            n             si            
##  [25]  des           on            a             j             
##  [29]  m             son           plus          mais          
##  [33]  ma            une           pas           du            
##  [37]  votre         elle          dans          par           
##  [41]  bien          moi           sa            nous          
##  [45]  au            s             tout          lui           
##  [49]  sans          fait          se            ai            
##  [53]  tu            point         c             mes           
##  [57]  cette         ses           vos           amour         
##  [61]  même         peut          sur           où           
##  [65]  coeur         ou            ces           avec          
##  [69]  tous          être         faire         scène        
##  [73]  comme         trop          faut          roi           
##  [77]  t             voir          aux           dont          
##  [81]  y             leur          rien          sont          
##  [85]  suis          yeux          te            ont           
##  [89]  âme          non           tant          ton           
##  [93]  ciel          ils           quand         enfin         
##  [97]  père         grand         madame        don           
## [101]  cet           donc          dieux         nos           
## [105]  quoi          autre         moins         peu           
## [109]  quelque       jamais        quel          ô            
## [113]  ta            mort          veux          ici           
## [117]  honneur       deux          puis          sang          
## [121]  notre         contre        avoir         jour          
## [125]  vois          esprit        soit          mal           
## [129]  toi           sort          toujours      dit           
## [133]  temps         aussi         doit          après        
## [137]  ainsi         seigneur      encore        gloire        
## [141]  veut          avez          aime          prince        
## [145]  toute         dire          là           main          
## [149]  peine         assez         leurs         fois          
## [153]  fort          va            seul          tes           
## [157]  oui           vie           donne         fille         
## [161]  encor         fils          sais          sous          
## [165]  était        ni            nom           bras          
## [169]  mieux         crime         dessein       fais          
## [173]  vient         reine         raison        état         
## [177]  vu            déjà        dois          dieu          
## [181]  homme         pouvoir       frère        ah            
## [185]  ha            fut           amant         hélas        
## [189]  quelle        rendre        première     discours      
## [193]  lieu          donner        voeux         aujourd       
## [197]  hui           foi           mains         juste         
## [201]  malheur       beau          ait           dis           
## [205]  heureux       autres        lieux         jusqu         
## [209]  vertu         pu            voit          crois         
## [213]  monsieur      celui         chez          fortune       
## [217]  grâce        jours         entre         puisque       
## [221]  flamme        coup          viens         bon           
## [225]  avait         haine         parler        autant        
## [229]  eux           mourir        trouve        doux          
## [233]  espoir        doute         courage       devoir        
## [237]  douleur       grands        belle         prendre       
## [241]  chose         moment        porte         êtes         
## [245]  phèdre       pleurs        toutes        devant        
## [249]  objet         tel           vais          cour          
## [253]  faites        sujet         force         parle         
## [257]  rois          effet         vrai          acte          
## [261]  courroux      mille         car           maître       
## [265]  soins         reste         bonheur       loin          
## [269]  eût          terre         part          seulement     
## [273]  allons        depuis        pourquoi      malheureux    
## [277]  puisse        monde         soin          laisse        
## [281]  peuple        sera          trône        cher          
## [285]  femme         sait          colère       as            
## [289]  bruit         digne         hippolyte     croire        
## [293]  seule         v             voulez        ardeur        
## [297]  extrême      maux          cela          coups         
## [301]  vers          voix          font          nuit          
## [305]  secret        faveur        fureur        plutôt       
## [309]  pris          repos         allez         mère         
## [313]  vain          ceux          corps         ii            
## [317]  mérite       triste        avant         époux        
## [321]  feu           peur          puisqu        ayant         
## [325]  cependant     hé           lois          sens          
## [329]  demande       destin        trouver       ennemis       
## [333]  iii           soeur         voyez         victoire      
## [337]  place         rend          traître      fit           
## [341]  malgré       souffrir      funeste       bientôt      
## [345]  hymen         lorsque       tête         coupable      
## [349]  iv            ose           semble        premier       
## [353]  celle         cruel         prix          gens          
## [357]  aimer         dessus        éclat        oeil          
## [361]  secours       trépas       donné        venger        
## [365]  alors         heure         perte         joie          
## [369]  serait        voilà        mettre        respect       
## [373]  quelques      rang          haut          longtemps     
## [377]  ennemi        perdre        choix         empire        
## [381]  généreux    cent          personne      rodrigue      
## [385]  ami           chercher      honte         paraître     
## [389]  vainqueur     esther        été         fin           
## [393]  bas           beaucoup      loi           aurait        
## [397]  servir        horreur       nature        puissance     
## [401]  sire          amitié       grande        voici         
## [405]  beauté       feux          savoir        souvent       
## [409]  envie         sein          afin          aller         
## [413]  aura          combat        justice       plaisir       
## [417]  pouvez        venir         bonne         fasse         
## [421]  sanche        suivre        théâtre     vengeance     
## [425]  avais         droit         fidèle       ordre         
## [429]  bouche        comment       craindre      voulu         
## [433]  crainte       dedans        malheurs      pitié        
## [437]  mis           partout       chimène      crains        
## [441]  larmes        thésée      vouloir       armes         
## [445]  désirs       visage        voyant        zèle         
## [449]  comte         intérêt     vue           choses        
## [453]  couronne      effort        estime        garde         
## [457]  hommes        rigueur       valeur        croit         
## [461]  monstre       offense       silence       cieux         
## [465]  cours         dites         passion       princesse     
## [469]  sortir        trouble       vivre         adieu         
## [473]  glorieux      mot           sauver        aurais        
## [477]  laissez       pays          telle         jeune         
## [481]  besoin        coeurs        lâche        montrer       
## [485]  quels         sentiments    illustre      esprits       
## [489]  étant        palais        sceptre       toutefois     
## [493]  appas         arcas         front         jaloux        
## [497]  racine        amis          maîtresse    paix          
## [501]  sorte         avis          cause         imprimer      
## [505]  infante       pourrait      rival         su            
## [509]  chacun        entendre      savez         alcandre      
## [513]  amoureux      cacher        mépris       orgueil       
## [517]  dès          noble         étais        fera          
## [521]  grandeur      rome          trois         biens         
## [525]  césar        chaque        conseil       plaît        
## [529]  retour        soleil        attendre      dernier       
## [533]  fatal         fers          parmi         tiens         
## [537]  univers       aucun         chère        combien       
## [541]  eut           près         vit           perfide       
## [545]  punir         abord         art           connaître    
## [549]  défendre     laisser       passe         sommes        
## [553]  ans           charmes       désir        entends       
## [557]  nouveau       parlez        sois          soupirs       
## [561]  cherche       innocence     prend         tient         
## [565]  très         elles         gardes        humeur        
## [569]  léonore      lucipe        mien          prends        
## [573]  succès       desseins      eu            maintenant    
## [577]  connais       cru           indigne       orante        
## [581]  perdu         peux          titus         traits        
## [585]  appelle       injuste       naissance     offre         
## [589]  saurait       cesse         ingrat        maison        
## [593]  pieds         regret        sujets        attends       
## [597]  comédie      croyez        épée        faible        
## [601]  instant       juge          outrage       paris         
## [605]  permis        action        étrange      propos        
## [609]  supplice      venez         air           cruelle       
## [613]  jusques       pensée       tantôt       amants        
## [617]  demander      demeure       constance     espère       
## [621]  fer           montre        pense         péril        
## [625]  souffre       suit          affaire       ailleurs      
## [629]  auprès       aventure      beaux         douleurs      
## [633]  met           nouvelle      plaire        régner       
## [637]  soient        tragédie     ville         aimable       
## [641]  aurai         histoire      milieu        penser        
## [645]  pourtant      privilège    propre        rage          
## [649]  transports    auteur        excès        mémoire      
## [653]  quelqu        attend        bons          es            
## [657]  faiblesse     lit           moindre       paraît       
## [661]  plein         présent      vi            arrêt        
## [665]  écoute       héros        i             liberté      
## [669]  peuvent       plaisirs      soi           audace        
## [673]  efforts       espérance    mots          odieux        
## [677]  presse        regards       service       tourment      
## [681]  vôtre        aimé         cache         oblige        
## [685]  recevoir      règne        rendu         songe         
## [689]  violence      bonté        chemin        douceur       
## [693]  innocent      légitime     parole        passer        
## [697]  plaindre      port          porter        vérité      
## [701]  vertus        achille       âge          avons         
## [705]  ensemble      espérer      pièce        sert          
## [709]  songez        vis           antoine       clitophon     
## [713]  faux          guerre        pourrais      remède       
## [717]  aussitôt     avecque       bout          obéir        
## [721]  ôte          tomber        trouvé       verra         
## [725]  voudrais      andromède    dernière     devez         
## [729]  louis         quitter       témoins      vaut          
## [733]  aveugle       bérénice    cède         désespoir    
## [737]  fuite         manque        mortel        parti         
## [741]  promis        rare          rends         souvenir      
## [745]  suffit        adore         aimez         donnez        
## [749]  enfants       importe       jason         mêmes        
## [753]  ombre         ôter         présence     soyez         
## [757]  beautés      ferai         foudre        long          
## [761]  lorsqu        moyen         perd          qualité      
## [765]  sage          tombeau       victime       apparence     
## [769]  aricie        clarigène    conseils      côté        
## [773]  effroi        favorable     fruit         juifs         
## [777]  médée       occasion      pedre         prison        
## [781]  sensible      souffrez      tour          agir          
## [785]  craignez      effets        exemple       misérable    
## [789]  or            tyran         affront       choeur        
## [793]  craint        ennui         fou           mauvais       
## [797]  nombre        parce         phinée       pourra        
## [801]  prêt         tôt          vaincre       conserver     
## [805]  contraire     hôtel        livre         naître       
## [809]  pareil        prête        suite         taire         
## [813]  tenir         vont          abandonne     barbare       
## [817]  carlos        clindor       haïr         importune     
## [821]  isabelle      japhet        âmes         arrête       
## [825]  capable       chambre       demain        entretien     
## [829]  erreur        lumière      pouvait       prompt        
## [833]  puissant      reçu         regarde       secrets       
## [837]  adresse       aisément     davantage     faisant       
## [841]  faute         forte         mari          ouvre         
## [845]  partir        prenez        venu          amène        
## [849]  cris          esclave       faits         hercule       
## [853]  hors          infidèle     mienne        périr        
## [857]  querelle      quoique       sosie         soupçons     
## [861]  tirer         véritable    criminel      défense      
## [865]  elvire        garder        haman         jette         
## [869]  juger         meure         orage         ouvrage       
## [873]  sacrifice     tort          touche        tue           
## [877]  armée        brute         famille       haute         
## [881]  lettre        majesté      poison        quitte        
## [885]  sentiment     tendresse     apprendre     attraits      
## [889]  danger        ferme         fût          genoux        
## [893]  infâme       monseigneur   mortels       obstacle      
## [897]  presque       seront        tombe         alcmène      
## [901]  bernard       certain       désormais    justes        
## [905]  messieurs     offrir        ressentiment  trait         
## [909]  vii           actions       amphitryon    content       
## [913]  douter        empêcher     entière      exploits      
## [917]  fameux        faveurs       finir         menace        
## [921]  morts         obliger       oreille       quatre        
## [925]  raisons       rendez        résoudre     serais        
## [929]  souci         surtout       accord        autel         
## [933]  écouter      faisons       jalousie      mérité      
## [937]  obéissance   oenone        perds         vaine         
## [941]  appui         brave         lors          mer           
## [945]  monarque      passions      satisfait     arrive        
## [949]  autrefois     bontés       connaît      destinée     
## [953]  fâcheux      fatale        hyménée     mériter      
## [957]  passé        peines        prie          refuse        
## [961]  rompre        serez         soldats       témoin       
## [965]  voyons        autorité     certes        change        
## [969]  dirai         disgrâce     fus           iphigénie    
## [973]  jupiter       ouvrir        petit         pleine        
## [977]  six           temple        tristes       tristesse     
## [981]  usage         affreux       attente       bois          
## [985]  cavalier      créuse       dû           enfers        
## [989]  ennuis        étaient      états        feinte        
## [993]  heur          pied          plainte       soir          
## [997]  approche      arrêter      justement     marine        
## 
## (total number of elements:  5000)

Ces mots sont classés du plus au moins fréquent dans le corpus. Nous pouvons voir leur fréquence par texte avec la variable table.with.all.freqs

## 
## ------------------------------------------------
## frequencies of words/features accross the corpus 
## ------------------------------------------------
## 
##                            de        et        que       le       
## CORNEILLEP_ANDROMEDE       3.3951384 2.8881046 1.8740369 1.6851419
## CORNEILLEP_CID             3.1328205 2.7110946 1.7286125 1.7795903
## CORNEILLEP_ILLUSIONCOMIQUE 3.3480808 2.5887839 1.7577424 1.5006577
## CORNEILLEP_MEDEE           3.602332  3.0193311 1.9515189 1.2887389
## DURYER_CLARIGENE           2.470869  2.5831812 2.470869  1.8180542
## DURYER_CLITOPHON           3.3655844 2.3683742 2.3505669 1.7213747
## DURYER_DYNAMIS             2.5321281 3.2563712 2.2326291 2.0638205
## DURYER_ESTHER              2.9122765 2.5985557 2.0894992 2.3262697
## MOLIERE_AMPHITRYON         3.3137427 2.7197699 2.050769  1.4442916
## MOLIERE_DOMGARCIEDENAVARRE 3.0433769 2.5303172 2.2854478 1.329291 
##                            ...       ...       ...       ...      
##                            vous      je        l         la       
## CORNEILLEP_ANDROMEDE       1.7497639 1.0488641 1.6553164 1.5658398
## CORNEILLEP_CID             0.8805265 1.5617759 1.8166651 1.3207897
## CORNEILLEP_ILLUSIONCOMIQUE 1.745785  1.9191678 1.4767428 1.2914026
## CORNEILLEP_MEDEE           1.0923596 1.5526235 1.5219392 1.5771709
## DURYER_CLARIGENE           2.0847957 1.965464  1.6706444 1.2003369
## DURYER_CLITOPHON           0.9259809 1.5967235 1.8222829 1.5848519
## DURYER_DYNAMIS             1.6663036 1.7370943 1.7262034 1.8296667
## DURYER_ESTHER              1.8290517 1.586362  1.562685  1.5330887
## MOLIERE_AMPHITRYON         1.5068151 2.1758159 1.4317869 1.0941603
## MOLIERE_DOMGARCIEDENAVARRE 2.1513526 1.6791045 1.5625    0.9736474
##                            ...       ...       ...       ...      
##                            à         un        il           
## CORNEILLEP_ANDROMEDE       1.8292986 1.307352  1.3272357 ...
## CORNEILLEP_CID             1.8954491 1.3995736 1.3485958 ...
## CORNEILLEP_ILLUSIONCOMIQUE 1.4707641 1.53653   1.6321894 ...
## CORNEILLEP_MEDEE           2.1172139 1.3930654 1.1660018 ...
## DURYER_CLARIGENE           1.2564931 1.7759371 1.488137  ...
## DURYER_CLITOPHON           1.317742  1.478008  1.0268891 ...
## DURYER_DYNAMIS             1.3232411 1.8351122 1.6118493 ...
## DURYER_ESTHER              1.3318338 1.7698591 1.4561383 ...
## MOLIERE_AMPHITRYON         1.6631237 1.3942729 1.3817682 ...
## MOLIERE_DOMGARCIEDENAVARRE 1.8948228 1.7257463 1.4109142 ...
##                            ...       ...       ...       ...
## 
## (total number of rows/columns:  28/5000)

On peut voir ces scores z-transformés avec $table.with.all.zscores

## 
## ---------------------------------------
## z-scored frequencies accross the corpus 
## ---------------------------------------
## 
##                            de         et         que        le        
## CORNEILLEP_ANDROMEDE       0.6842816  0.472655   -0.2652929 -0.4254443
## CORNEILLEP_CID             -0.0100579 -0.0027929 -0.6987936 -0.1466652
## CORNEILLEP_ILLUSIONCOMIQUE 0.559723   -0.3313188 -0.6119591 -0.9699783
## CORNEILLEP_MEDEE           1.2327103  0.8251286  -0.0343241 -1.5954895
## DURYER_CLARIGENE           -1.7622027 -0.3463675 1.513825   -0.0331331
## DURYER_CLITOPHON           0.6060539  -0.9233382 1.1552121  -0.3184976
## DURYER_DYNAMIS             -1.6000537 1.461817   0.8036471  0.6922844 
## DURYER_ESTHER              -0.5938241 -0.3050718 0.3769864  1.4669438 
## MOLIERE_AMPHITRYON         0.468832   0.0205089  0.2615342  -1.1363515
## MOLIERE_DOMGARCIEDENAVARRE -0.2468096 -0.4883602 0.9610963  -1.4757935
##                            ...        ...        ...        ...       
##                            vous       je         l          la        
## CORNEILLEP_ANDROMEDE       -0.031686  -1.4494191 0.0592382  -0.0339873
## CORNEILLEP_CID             -1.3067341 -0.4017725 0.9072204  -0.7548753
## CORNEILLEP_ILLUSIONCOMIQUE -0.0375225 0.3282174  -0.8792708 -0.8413261
## CORNEILLEP_MEDEE           -0.9960049 -0.4204667 -0.641737  -0.0006535
## DURYER_CLARIGENE           0.4597582  0.4227796  0.1397958  -1.1092229
## DURYER_CLITOPHON           -1.2400589 -0.3303904 0.9367451  0.0219424 
## DURYER_DYNAMIS             -0.1541104 -0.0436763 0.4317912  0.7421382 
## DURYER_ESTHER              0.084618   -0.3515541 -0.4275942 -0.1303346
## MOLIERE_AMPHITRYON         -0.3880575 0.8524335  -1.1155403 -1.4215731
## MOLIERE_DOMGARCIEDENAVARRE 0.5573877  -0.1621233 -0.4285664 -1.7760978
##                            ...        ...        ...        ...       
##                            à          un         il            
## CORNEILLEP_ANDROMEDE       1.015182   -0.4852049 -0.1214816 ...
## CORNEILLEP_CID             1.2611529  -0.0633864 -0.0176195 ...
## CORNEILLEP_ILLUSIONCOMIQUE -0.317976  0.5630468  1.3613342  ...
## CORNEILLEP_MEDEE           2.0857528  -0.0931551 -0.9054696 ...
## DURYER_CLARIGENE           -1.1147115 1.6580865  0.6608897  ...
## DURYER_CLITOPHON           -0.8869661 0.2953693  -1.5818956 ...
## DURYER_DYNAMIS             -0.8665185 1.9287511  1.2624317  ...
## DURYER_ESTHER              -0.834568  1.630286   0.5052981  ...
## MOLIERE_AMPHITRYON         0.3972849  -0.087632  0.1436787  ...
## MOLIERE_DOMGARCIEDENAVARRE 1.258824   1.4285154  0.2853992  ...
##                            ...        ...        ...        ...
## 
## (total number of rows/columns:  28/5000)

Ces résultats permettent d’évaluer la distance entre chacun des textes de notre corpus. Cette fois les résultats sont accessibles avec le nom de notre variable suivi de $distance.table

## 
## --------------------------------------------
## final distances between each pair of samples 
## --------------------------------------------
## 
##                            CORNEILLEP_ANDROMEDE CORNEILLEP_CID
## CORNEILLEP_ANDROMEDE       0                    1.0009417     
## CORNEILLEP_CID             1.0009417            0             
## CORNEILLEP_ILLUSIONCOMIQUE 0.9943957            0.9711001     
## CORNEILLEP_MEDEE           0.9916627            0.9460653     
## DURYER_CLARIGENE           1.0603433            1.0389668     
## DURYER_CLITOPHON           1.0171782            1.057457      
## DURYER_DYNAMIS             1.0533041            1.0179688     
## DURYER_ESTHER              1.0369347            1.0302385     
## MOLIERE_AMPHITRYON         1.05929              1.073594      
## MOLIERE_DOMGARCIEDENAVARRE 1.0073869            1.0103043     
##                            ...                  ...           
##                            CORNEILLEP_ILLUSIONCOMIQUE CORNEILLEP_MEDEE
## CORNEILLEP_ANDROMEDE       0.9943957                  0.9916627       
## CORNEILLEP_CID             0.9711001                  0.9460653       
## CORNEILLEP_ILLUSIONCOMIQUE 0                          0.9472041       
## CORNEILLEP_MEDEE           0.9472041                  0               
## DURYER_CLARIGENE           1.0658526                  1.0380353       
## DURYER_CLITOPHON           1.0131517                  1.0169681       
## DURYER_DYNAMIS             1.060149                   1.0561129       
## DURYER_ESTHER              1.0973139                  1.0064069       
## MOLIERE_AMPHITRYON         1.013192                   1.0647345       
## MOLIERE_DOMGARCIEDENAVARRE 1.0501424                  1.0141992       
##                            ...                        ...             
##                            DURYER_CLARIGENE DURYER_CLITOPHON
## CORNEILLEP_ANDROMEDE       1.0603433        1.0171782       
## CORNEILLEP_CID             1.0389668        1.057457        
## CORNEILLEP_ILLUSIONCOMIQUE 1.0658526        1.0131517       
## CORNEILLEP_MEDEE           1.0380353        1.0169681       
## DURYER_CLARIGENE           0                0.8605236       
## DURYER_CLITOPHON           0.8605236        0               
## DURYER_DYNAMIS             0.9177383        0.9836259       
## DURYER_ESTHER              0.9301051        0.9741543       
## MOLIERE_AMPHITRYON         1.0717888        1.0964716       
## MOLIERE_DOMGARCIEDENAVARRE 1.0344084        1.0954863       
##                            ...              ...             
##                            DURYER_DYNAMIS DURYER_ESTHER MOLIERE_AMPHITRYON
## CORNEILLEP_ANDROMEDE       1.0533041      1.0369347     1.05929           
## CORNEILLEP_CID             1.0179688      1.0302385     1.073594          
## CORNEILLEP_ILLUSIONCOMIQUE 1.060149       1.0973139     1.013192          
## CORNEILLEP_MEDEE           1.0561129      1.0064069     1.0647345         
## DURYER_CLARIGENE           0.9177383      0.9301051     1.0717888         
## DURYER_CLITOPHON           0.9836259      0.9741543     1.0964716         
## DURYER_DYNAMIS             0              0.8451089     1.0807069         
## DURYER_ESTHER              0.8451089      0             1.1242496         
## MOLIERE_AMPHITRYON         1.0807069      1.1242496     0                 
## MOLIERE_DOMGARCIEDENAVARRE 1.0027317      1.0192903     0.9480107         
##                            ...            ...           ...               
##                            MOLIERE_DOMGARCIEDENAVARRE MOLIERE_MISANTHROPE
## CORNEILLEP_ANDROMEDE       1.0073869                  1.0644665          
## CORNEILLEP_CID             1.0103043                  1.0967865          
## CORNEILLEP_ILLUSIONCOMIQUE 1.0501424                  1.0286613          
## CORNEILLEP_MEDEE           1.0141992                  1.0892613          
## DURYER_CLARIGENE           1.0344084                  1.0723518          
## DURYER_CLITOPHON           1.0954863                  1.1228778          
## DURYER_DYNAMIS             1.0027317                  1.0995535          
## DURYER_ESTHER              1.0192903                  1.0901811          
## MOLIERE_AMPHITRYON         0.9480107                  0.8437953          
## MOLIERE_DOMGARCIEDENAVARRE 0                          0.8770485          
##                            ...                        ...                
##                               
## CORNEILLEP_ANDROMEDE       ...
## CORNEILLEP_CID             ...
## CORNEILLEP_ILLUSIONCOMIQUE ...
## CORNEILLEP_MEDEE           ...
## DURYER_CLARIGENE           ...
## DURYER_CLITOPHON           ...
## DURYER_DYNAMIS             ...
## DURYER_ESTHER              ...
## MOLIERE_AMPHITRYON         ...
## MOLIERE_DOMGARCIEDENAVARRE ...
##                            ...
## 
## (total number of rows/columns:  28/28)

C’est donc à partir de ces fréquences, puis de ces distances que nous obtenons les dendogrammes que nous avons vus précédemment.

4 D’autres visualisations

4.1 Principal component analysis

Un autre mode de visualisation est le principal component analysis (“Analyse en composantes principales” en français), qui permet lui aussi de spatialiser les résultats, selon une autre éthode de calcul.

4.1.2 Principal component analysis (avec les mots en superposition)

Il est possible de superposer les tokens (ici les mots) aux labels, afin de comprendre sur quelles données lexicales s’appuie la spatialisation.

On le voit, la plupart des tokens ayant des fréquences très faible, on se retrouve avec un “tas” de mots au centre, ce qui rend les données illisibles… Comment faire?

  • Aller chercher les données brutes, mais on perd l’avantage de la visualisation.
  • Tenter “d’étirer” la partie centrale.

4.1.3 Principal component analysis: les classes

Nous avons vu au cours précédent qu’il est important de contrôler la significativité des axes produits: nous ne pouvons cependant pas le faire avec stylo(), et il faut se tourner vers un autre pasckage: FactoMineR.

La première étape est de récupérer les fréquences qui nous intéressent pour les réutiliser plus tard:

## 
## ------------------------------------------------
## frequencies of words/features accross the corpus 
## ------------------------------------------------
## 
##                            de        et        que       le       
## CORNEILLEP_ANDROMEDE       3.3951384 2.8881046 1.8740369 1.6851419
## CORNEILLEP_CID             3.1328205 2.7110946 1.7286125 1.7795903
## CORNEILLEP_ILLUSIONCOMIQUE 3.3480808 2.5887839 1.7577424 1.5006577
## CORNEILLEP_MEDEE           3.602332  3.0193311 1.9515189 1.2887389
## DURYER_CLARIGENE           2.470869  2.5831812 2.470869  1.8180542
## DURYER_CLITOPHON           3.3655844 2.3683742 2.3505669 1.7213747
## DURYER_DYNAMIS             2.5321281 3.2563712 2.2326291 2.0638205
## DURYER_ESTHER              2.9122765 2.5985557 2.0894992 2.3262697
## MOLIERE_AMPHITRYON         3.3137427 2.7197699 2.050769  1.4442916
## MOLIERE_DOMGARCIEDENAVARRE 3.0433769 2.5303172 2.2854478 1.329291 
##                            ...       ...       ...       ...      
##                            vous      je        l         la       
## CORNEILLEP_ANDROMEDE       1.7497639 1.0488641 1.6553164 1.5658398
## CORNEILLEP_CID             0.8805265 1.5617759 1.8166651 1.3207897
## CORNEILLEP_ILLUSIONCOMIQUE 1.745785  1.9191678 1.4767428 1.2914026
## CORNEILLEP_MEDEE           1.0923596 1.5526235 1.5219392 1.5771709
## DURYER_CLARIGENE           2.0847957 1.965464  1.6706444 1.2003369
## DURYER_CLITOPHON           0.9259809 1.5967235 1.8222829 1.5848519
## DURYER_DYNAMIS             1.6663036 1.7370943 1.7262034 1.8296667
## DURYER_ESTHER              1.8290517 1.586362  1.562685  1.5330887
## MOLIERE_AMPHITRYON         1.5068151 2.1758159 1.4317869 1.0941603
## MOLIERE_DOMGARCIEDENAVARRE 2.1513526 1.6791045 1.5625    0.9736474
##                            ...       ...       ...       ...      
##                            à         un        il           
## CORNEILLEP_ANDROMEDE       1.8292986 1.307352  1.3272357 ...
## CORNEILLEP_CID             1.8954491 1.3995736 1.3485958 ...
## CORNEILLEP_ILLUSIONCOMIQUE 1.4707641 1.53653   1.6321894 ...
## CORNEILLEP_MEDEE           2.1172139 1.3930654 1.1660018 ...
## DURYER_CLARIGENE           1.2564931 1.7759371 1.488137  ...
## DURYER_CLITOPHON           1.317742  1.478008  1.0268891 ...
## DURYER_DYNAMIS             1.3232411 1.8351122 1.6118493 ...
## DURYER_ESTHER              1.3318338 1.7698591 1.4561383 ...
## MOLIERE_AMPHITRYON         1.6631237 1.3942729 1.3817682 ...
## MOLIERE_DOMGARCIEDENAVARRE 1.8948228 1.7257463 1.4109142 ...
##                            ...       ...       ...       ...
## 
## (total number of rows/columns:  28/5000)
##      CORNEILLEP_ANDROMEDE CORNEILLEP_CID CORNEILLEP_ILLUSIONCOMIQUE
## de               3.395138      3.1328205                   3.348081
## et               2.888105      2.7110946                   2.588784
## que              1.874037      1.7286125                   1.757742
## le               1.685142      1.7795903                   1.500658
## vous             1.749764      0.8805265                   1.745785
## je               1.048864      1.5617759                   1.919168
##      CORNEILLEP_MEDEE DURYER_CLARIGENE DURYER_CLITOPHON DURYER_DYNAMIS
## de           3.602332         2.470869        3.3655844       2.532128
## et           3.019331         2.583181        2.3683742       3.256371
## que          1.951519         2.470869        2.3505669       2.232629
## le           1.288739         1.818054        1.7213747       2.063821
## vous         1.092360         2.084796        0.9259809       1.666304
## je           1.552624         1.965464        1.5967235       1.737094
##      DURYER_ESTHER MOLIERE_AMPHITRYON MOLIERE_DOMGARCIEDENAVARRE
## de        2.912277           3.313743                   3.043377
## et        2.598556           2.719770                   2.530317
## que       2.089499           2.050769                   2.285448
## le        2.326270           1.444292                   1.329291
## vous      1.829052           1.506815                   2.151353
## je        1.586362           2.175816                   1.679104
##      MOLIERE_MISANTHROPE MOLIERE_TARTUFFE RACINE_BERENICE RACINE_ESTHER
## de              3.262026         3.138635        3.333333     3.5413770
## et              3.086420         3.185550        1.983365     2.4657935
## que             2.059387         1.914145        2.188100     1.4414283
## le              1.580460         1.505982        1.682662     2.4950611
## vous            3.091741         3.133943        2.616763     0.9877808
## je              2.261601         1.904762        2.603967     0.9072949
##      RACINE_IPHIGENIE RACINE_PHEDRE ROTROU_COSROES ROTROU_DEUXPUCELLES
## de           3.003790     4.0640927       3.169511            3.180893
## et           2.479938     2.1786202       3.336327            2.817677
## que          1.983950     1.2325527       1.315283            2.080238
## le           1.688587     1.9787468       2.033877            1.408838
## vous         2.574677     0.9960358       2.572822            1.293269
## je           1.816763     1.1459409       1.385859            1.766551
##      ROTROU_DOMBERNARDDECABRERE ROTROU_HERCULEMOURANT
## de                     3.468175             3.2294961
## et                     3.245343             3.2833210
## que                    1.514113             1.7089417
## le                     2.022626             1.7358541
## vous                   1.496972             0.5315212
## je                     1.091304             0.9688488
##      SCARRON_DOMJAPHETDARMENIE SCARRON_ECOLIERDESALAMANQUE
## de                    3.060230                    2.880212
## et                    2.345527                    2.681369
## que                   1.494380                    2.018559
## le                    2.007667                    1.663051
## vous                  2.033656                    2.368040
## je                    2.429992                    2.500603
##      SCARRON_FAUSSEAPPARENCE SCARRON_GARDIENDESOIMEME SCUDERY_MORTDECESAR
## de                  2.762744                 2.741808            3.495815
## et                  2.441787                 2.261536            2.968277
## que                 2.108244                 1.866375            2.300063
## le                  1.422278                 2.249377            2.377435
## vous                2.234110                 1.969725            1.266090
## je                  2.353682                 2.504712            1.259056
##      SCUDERY_ORANTE SCUDERY_PRINCEDEGUISE SCUDERY_VASSALGENEREUX
## de         2.281265              3.284882               2.810734
## et         2.322246              3.092784               2.500000
## que        2.233454              2.298777               2.415254
## le         2.144662              1.991420               2.274011
## vous       1.502630              1.120574               2.175141
## je         2.076361              1.805725               1.631356

Je peux désormais contrôler la significativité des axes produits:

## Loading required package: FactoMineR

Mais nous allons un peu vite: ralentissons un peu, nous reviendrons à ces questions le cours prochain.

4.2 Principal component analysis (avec correlation)

Il est possible de modifier les résultats afin d’accentuer de manière proportionnelle la distance entre les différents tokens pour “aérer” la partie centrale en modifiant légèrement la méthode de calcul.

Il est ainsi possible d’associer certains tokens à des auteurs, ou des groupes d’auteurs.

En bas du graphique, on trouve un pourcentage: il nous donne une idée de la distortion apportée au résultat précédent pour accentuer l’espace entre les mots, et donc le degré de fiabilité du résultat. On remarque la correlation a fait perdre de la significativité au premier axe.

4.3 Multidimensional scaling

Un mode de visualisation des données assez commun est le Multidimensional scaling (“positionnement multidimensionnel” en français). Pour faire (très, très) simple, il s’agit de spatialiser les résultats.

Un des intérêts de ce type de visualisation est d’identifier les auteurs avec les styles les plus neutres, et ceux avec les styles les plus marqués.